package cn.highedu.spring.bean15;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.sql.DataSource;

@Component
public class JdbcAccountRepository implements AccountRepository {
    private DataSource dataSource;

    public JdbcAccountRepository(){
        System.out.println("创建JdbcAccountRepository");
    }

    public JdbcAccountRepository(DataSource dataSource){
        System.out.println("创建JdbcAccountRepository");
        this.dataSource = dataSource;
    }

    @Autowired
    public void setDataSource(DataSource dataSource) {
        System.out.println("setDataSource 注入在@PostConstruct之后执行");
        this.dataSource = dataSource;
    }

    @Override
    public DataSource getDataSource() {
        return dataSource;
    }

    @PostConstruct // 在构造方法执行之后执行
    // 被添加注解的方法，可以是任意可见性的，但是必须没有参数，且返回值类型必须是void。
    void populateCache() {
        System.out.println("populateCache 缓存初始化");
    }

    @PreDestroy // 在bean销毁之前执行
    void flushCache() {
        System.out.println("flushCache 缓存清理");
    }

}
